'use strict';
const db = uniCloud.database();

exports.main = async (event, context) => {
  try {
    // 解构入参并做默认值处理
    const { 
      name, 
      birthYear, 
      mobile, 
      email = '', 
      address = '', 
      intro = '', 
      loginAccount, 
      loginPwd 
    } = event;

    // 1. 日志完善：打印完整入参（脱敏密码）
    console.log('收到注册请求数据：', { 
      name, 
      birthYear, 
      mobile, 
      loginAccount,
      email: email || '未填',
      address: address || '未填',
      intro: intro || '未填',
      loginPwd: '******' // 密码脱敏，避免日志泄露
    });

    // 2. 基础必填项校验
    if (!name || !birthYear || !mobile || !loginAccount || !loginPwd) {
      console.log('校验失败：必填项为空');
      return { code: 400, msg: '请填写完整必填信息' };
    }

    // 3. 检查手机号/登录账户是否已存在（修复变量名错误）
    console.log('开始检查用户是否已注册...');
    const dbCmd = db.command;
    const [userByMobileRes, accountByLoginRes] = await Promise.all([
      db.collection('UserInfo').where({ mobile }).count(),
      db.collection('Accounts').where({ account: loginAccount }).count()
    ]);

    // 打印正确的检查结果（修复变量名错误）
    console.log('检查结果：', {
      userByMobileTotal: userByMobileRes.total,
      accountByLoginTotal: accountByLoginRes.total
    });

    // 手机号已注册
    if (userByMobileRes.total > 0) {
      console.log('注册失败：手机号已存在', mobile);
      return { code: 400, msg: '该手机号已注册' };
    }
    // 登录账户已存在
    if (accountByLoginRes.total > 0) {
      console.log('注册失败：登录账户已存在', loginAccount);
      return { code: 400, msg: '该登录账户名已被使用' };
    }

    // 4. 插入用户基础信息到UserInfo集合
    console.log('开始插入UserInfo...');
    const currentTime = new Date();
    const userData = {
      name,
      birth_year: parseInt(birthYear), // 确保年份是数字类型
      mobile,
      email,
      address,
      intro,
      create_time: currentTime,
      update_time: currentTime
    };
    
    console.log('UserInfo插入数据：', userData);
    const userAddRes = await db.collection('UserInfo').add(userData);
    console.log('UserInfo插入成功，ID：', userAddRes.id);

    // 5. 密码加密（注意：Base64仅为演示，生产环境请用bcrypt/sha256等）
    console.log('开始加密密码...');
    const encryptedPwd = Buffer.from(loginPwd).toString('base64');
    console.log('密码加密完成（Base64演示）');

    // 6. 插入账户信息到Accounts集合
    console.log('开始插入Accounts...');
    const accountData = {
      user_id: userAddRes.id, // 关联UserInfo的ID
      account: loginAccount,
      password: encryptedPwd, 
      register_time: currentTime,
      last_login_time: null,
      status: 1 // 账户状态：1-正常，0-禁用
    };
    
    console.log('Accounts插入数据：', accountData);
    const accountAddRes = await db.collection('Accounts').add(accountData);
    console.log('Accounts插入成功，ID：', accountAddRes.id);

    // 7. 注册成功返回
    console.log('注册流程全部完成，用户ID：', userAddRes.id);
    return { 
      code: 200, 
      msg: '注册成功',
      data: {
        userId: userAddRes.id,
        loginAccount: loginAccount
      } 
    };

  } catch (error) {
    // 错误日志完善
    console.error('注册失败：', error.message);
    console.error('错误堆栈：', error.stack);
    // 生产环境避免返回具体错误信息给前端
    return { 
      code: 500, 
      msg: '服务器内部错误，请稍后重试' 
    };
  }
};